// import { UIView } from "../base/UIView";
// import USDate from "../comm/USDate";
// import { XUtils } from "../comm/XUtils";
// import { IPassItem } from "../configs/CfgBattlePass";
// import { IPassTask } from "../configs/CfgBattlePassTask";
// import { CfgItemID } from "../configs/CfgItem";
// import Cfgs from "../configs/Cfgs";
// import { IReward } from "../configs/CfgSteakCollection";
// import { CardValueBlack, CardValueBlank, CardValueBlow, CardValueRed } from "../data/GameConfig";
// import { GameAction, GameActionType, SteakColor } from "../data/GameObjects";
// import LocalValues, { LocalKey } from "../data/LocalValues";
// import UserCtrl from "../data/UserCtrl";
// import UserModel from "../data/UserModel";
// import GameLogic from "../game/GameLogic";
// import { EventMgr, EventName } from "../manager/EventMgr";
// import { EventReport } from "../net/EventReport";
// import { UIBattlePass } from "../ui/actBattlePass/UIBattlePass";
// import ADCtrl from "./ADCtrl";
// import HallCtrl from "./HallCtrl";


// export interface IPassCtrl {
//     bankLevel: number;
//     init(): void;
//     bind(view: UIBattlePass): void;
//     unbind(): void;
//     /**0正常开启 1时间未开启 2等级不够 */
//     getSate(): 0|1|2;
//     getRoundIdx(): number;
//     isPass(): boolean;
//     buyPass(): void;
//     //============<Reward
//     /**获得Pass等级 */
//     getLv(): number;
//     /**获得当前Pass等级经验 */
//     getLvExp(): number;
//     /**获得当前Pass */
//     getCurPass(): IPassItem;
//     getPassList(): IPassItem[];
//     /**获得免费栏领取状态列表 */
//     getReceiveds(): boolean[];
//     /**获得Pass栏领取状态列表 */
//     getReceivedsPass(): boolean[];
//     /**获得bank奖励 */
//     getBankRewards(): IReward[];
//     /**领取普通奖励 */
//     receiveReward(lv: number): boolean;
//     /**领取Pass奖励 */
//     receiveRewardPass(lv: number): boolean;
//     /**领取bank奖励 */
//     receiveBankRewards(): boolean;
//     /**普通奖励未领取数量 */
//     getUnreceivedCount(): number;
//     //Reward>============
//     reportProgress(): void;
//     //============<Task
//     /**
//      * 返回任务列表
//      * @param type 1日 2周 3赛季
//      */
//     getTasks(type: TaskGroupType): IPassTask[];
//     /**获得任务数据 */
//     getTaskDatas(type: TaskGroupType): IPassTaskData[];
//     /**任务刷新倒计时 */
//     getTaskCountdown(type: TaskGroupType): number;
//     /**刷新任务 */
//     refreshTask(type: TaskGroupType, idx: number): IPassTask;
//     /**领取任务经验 */
//     receiveTask(type: TaskGroupType, idx: number): IPassTaskResult;
//     /**领取所有任务经验 */
//     receiveAllTask(type: TaskGroupType, isAd: boolean): IPassTaskResult;
//     /**是否存在未领取任务 */
//     hasUnreceivedTask(type: TaskGroupType): boolean;
//     /**获得未领取任务数量 */
//     getUnreceivedTaskCount(): number;
//     //Task>============
//     //============<onTask
//     onTaskGameStart(): void;
//     onTaskGameEnd(bWin: boolean): void;
//     onTaskLogin(): void;
//     onTaskCollectCoin(coin: number): void;
//     onTaskSteakFull(): void;
//     onTaskCollectCard(cardValue: number): void;
//     isJokerKeepCombo: boolean;
//     onTaskComboLink(count: number): void;
//     onTaskJokerKeepCombo(): void;
//     onTaskBoosterClearCard(count: number): void;
//     onTaskUndo(action: GameAction): void;
//     //onTask>============
// }
// export interface IPassTaskResult {
//     finishedPass: IPassItem[],
//     addExp: number,
//     lastLv: number,
//     curLv: number,
//     curLvExp: number
// }
// export interface IPassTaskData {
//     received: boolean;
//     progress: number;
// }
// export interface IPassData {
//     dayIdx: number;
//     roundIdx: number;
//     totalExp: number;
//     curLv: number;
//     curLvExp: number;
//     receiveds: boolean[];
//     receivedsPass: boolean[];
//     isPass: boolean;
//     // 还有任务数据
//     taskIdxs: {[key: number]: number[]};
//     taskDatas: {[key: number]: IPassTaskData[]};
//     bankRewards: IReward[];
// }
// const TAG = 'PassCtrl';
// export class PassCtrl implements IPassCtrl {
//     private view: UIView;
//     private _data: IPassData;
//     private _taskCounter: IPassTaskCounter = {
//         steakFullCount: 0,
//         collectCardRed: 0,
//         collectCardBlack: 0,
//         maxComboLink: 0,
//         jokerKeepCombo: 0,
//         boosterClearCard: 0,
//     };
//     private get cfg() {
//         return Cfgs.BattlePass;
//     }
//     private get cfgTask() {
//         return Cfgs.BattlePassTask;
//     }
//     init() {
//         if (this.getSate() != 0) {
//             EventMgr.on(EventName.onCurLevelChange, this.onLevelChange, this);
//             return; // 活动未开启
//         }
//         this._data = LocalValues.getObject(LocalKey.passData);
//         if (!this._data) {
//             this.newRound();
//         }
//         if (this._data.roundIdx != this.getRoundIdx()) {
//             if (this.getUnreceivedCount() > 0) {
//                 return; // 还有未领取的奖励，不能更新赛季数据
//             } else {
//                 // 更新赛季
//                 this.newRound();
//                 this.timeoutDay();
//             }
//         } else {
//             if (this._data.dayIdx != this.getDayIdx()) {
//                 this.onDayChange();
//             }
//             // 启动明天倒计时
//             this.timeoutDay();
//         }
//     }
//     private onLevelChange() {
//         if (this.getSate() == 0 && !this._data) {
//             console.log(TAG, '玩家等级达到，开启Pass');
//             this.newRound();
//             // 启动明天倒计时
//             this.timeoutDay();
//         }
//     }
//     private newRound() {
//         this._data = {
//             dayIdx: this.getDayIdx(),
//             roundIdx: this.getRoundIdx(),
//             totalExp: 0,
//             curLv: 0,
//             curLvExp: 0,
//             receiveds: [],
//             receivedsPass: [],
//             isPass: false,
//             taskIdxs: {},
//             taskDatas: {},
//             bankRewards: [],
//         }
//         this.refreshTaskGroup(3);
//         this.refreshTaskGroup(2);
//         this.refreshTaskGroup(1);
//         console.log(TAG, 'newRound', this._data);
//     }
//     private _timeoutDay: any;
//     private timeoutDay() {
//         clearTimeout(this._timeoutDay);
//         this._timeoutDay = setTimeout(() => {
//             this.onDayChange();
//             this.timeoutDay();
//         }, USDate.getTomorrowCountdown());
//     }
//     private onDayChange() {
//         if (this._data.roundIdx != this.getRoundIdx()) {
//             // 如果是新赛季，newRound
//             if (this.getUnreceivedCount() > 0) {
//                 return; // 还有未领取的奖励，不能更新赛季数据
//             } else {
//                 // 更新赛季
//                 this.newRound();
//             }
//         } else {
//             this._data.dayIdx = this.getDayIdx();
//             if (this._data.dayIdx % 7 == 0) {
//                 // 如果是新周，刷新周任务
//                 this.refreshTaskGroup(2);
//             }
//             // 刷新日任务
//             this.refreshTaskGroup(1);
//         }
//     }
//     private _timerSave = null;
//     private save() {
//         if (this._timerSave) {
//             return;
//         }
//         this._timerSave = setTimeout(() => {
//             this._timerSave = null;
//             LocalValues.setObject(LocalKey.passData, this._data);
//         }, 100);
//     }
//     bind(view: UIBattlePass): void {
//         this.view = view;
//     }
//     unbind(): void {
//         this.view = null;
//     }
//     /**
//      * 0正常开启 1时间未开启 2等级不够
//      */
//     getSate(): 0 | 1 | 2 {
//         if (Date.now() < this.cfg.unlockTime) {
//             return 1;
//         } else if (UserModel.curLevelId < this.cfg.unlockLevel) {
//             return 2;
//         }
//         return 0;
//     }
//     /**当前是活动开启的第几天，小于0表示没开启 */
//     private getDayIdx(): number {
//         return Math.floor((USDate.now() - this.cfg.unlockTime) / USDate.DAY_MILLISECONDS);
//     }
//     /**当前时间的轮次id，小于0表示没开启 */
//     getRoundIdx(): number {
//         return Math.floor((USDate.now() - this.cfg.unlockTime) / this.cfg.roundTime);
//     }
//     isPass(): boolean {
//         return this._data?.isPass;
//     }
//     buyPass() {
//         this._data.isPass = true;
//         this.save();
//         // 增加赛季剩余时间的免广告
//         ADCtrl.instance.addNoAdTime(this.getTaskCountdown(3));
//     }
//     getLv(): number {
//         return this._data.curLv;
//     }
//     getLvExp(): number {
//         return this._data.curLvExp;
//     }
//     getCurPass(): IPassItem {
//         return this.cfg.getList()[this.getLv()];
//     }
//     public get bankLevel(): number {
//         const list = this.cfg.getList();
//         return list[list.length - 1].passLevel;
//     }
//     getPassList(): IPassItem[] {
//         return this.cfg.getList();
//     }
//     getReceiveds(): boolean[] {
//         return this._data.receiveds;
//     }
//     getReceivedsPass(): boolean[] {
//         return this._data.receivedsPass;
//     }
//     receiveReward(lv: number): boolean {
//         if (lv > this.getLv()) {
//             return false; // 还未到达
//         }
//         if (this.getReceiveds()[lv]) {
//             return false; // 已领取
//         }
//         this._data.receiveds[lv] = true;
//         // 领取奖励
//         this.issueRewards(this.getPassList()[lv].freeReward);
//         return true;
//     }
//     receiveRewardPass(lv: number): boolean {
//         if (lv > this.getLv()) {
//             return false; // 还未到达
//         }
//         if (this.getReceivedsPass()[lv]) {
//             return false; // 已领取
//         }
//         this._data.receivedsPass[lv] = true;
//         // 领取奖励
//         this.issueRewards(this.getPassList()[lv].payReward);
//         return true;
//     }
//     receiveBankRewards(): boolean {
//         if (!this.isPass()) {
//             return false;
//         }
//         if (this._data.bankRewards?.length > 0) {
//             this.issueRewards(this._data.bankRewards);
//             this._data.bankRewards = [];
//             this.save();
//             return true;
//         }
//         return false;
//     }
//     getBankRewards(): IReward[] {
//         return this._data.bankRewards || [];
//     }
//     // 发放奖励
//     private issueRewards(rewards: IReward[], reason = 'pass') {
//         console.log(TAG, 'issueRewards', rewards, reason);
//         HallCtrl.addRewardToQueue(rewards, reason, true);
//     }
//     getUnreceivedCount(): number {
//         let count = 0;
//         const lv = this.getLv();
//         const list = this.getPassList();
//         for (let i = 0; i < list.length; i++) {
//             const e = list[i];
//             if (e.passLevel >= lv) {
//                 break;
//             }
//             const received = this.getReceiveds()[i];
//             if (!received) {
//                 count ++;
//             }
//         }
//         return count;
//     }
//     private refreshTaskGroup(type: TaskGroupType) {
//         console.log(TAG, 'refreshTaskGroup', type);
//         const g = this.cfgTask.groups[type-1];
//         const count = g.task;
//         const curTasks: IPassTask[] = [];
//         this._data.taskIdxs[type] = [];
//         this._data.taskDatas[type] = [];
//         for (let i = 0; i < count; i++) {
//             const task = this.randomTask(type, curTasks);
//             this._data.taskIdxs[type].push(task.idx);
//             curTasks.push(task);
//             this._data.taskDatas[type].push({
//                 received: false,
//                 progress: 0,
//             });
//         }
//         console.log(TAG, 'curTasks'+type, [...curTasks]);
//         this.save();
//     }
//     private randomTask(type: TaskGroupType, curTasks: IPassTask[]) {
//         let tasks = this.cfgTask.getTasksByType(type);
//         console.log('randomTask', type, [...curTasks], [...tasks]);
//         if (curTasks?.length > 0) {
//             // // 过滤掉curTasks
//             // tasks = tasks.filter(e => curTasks.indexOf(e) == -1);
//             // console.log(TAG, '过滤掉curTasks', [...tasks]);
//             // 过滤掉任务目标一样的
//             const targets = curTasks.map(e=>e.taskTarget);
//             tasks = tasks.filter(e => targets.indexOf(e.taskTarget) == -1);
//             console.log(TAG, '过滤掉任务目标一样的', [...tasks]);
//         }
//         if (tasks.length == 0) {
//             return null; // 没有符合条件的任务了
//         }
//         const sumProbability = tasks.reduce((sum, e) => sum + e.taskProbability, 0);
//         const random = Math.random() * sumProbability;
//         let curProbability = 0;
//         for (const e of tasks) {
//             curProbability += e.taskProbability;
//             if (random <= curProbability) {
//                 return e;
//             }
//         }
//         return null;
//     }
//     getTasks(type: TaskGroupType): IPassTask[] {
//         const idxs = this._data.taskIdxs[type];
//         const tasks = this.cfgTask.getTasksByType(type);
//         return idxs.map(idx => tasks[idx]);
//     }
//     getTaskDatas(type: TaskGroupType): IPassTaskData[] {
//         return this._data.taskDatas[type] || [];
//     }
//     getTaskCountdown(type: TaskGroupType): number {
//         const tomorrow = USDate.getTomorrowCountdown();
//         if (type == 1) {// 如果是1，就是今天的剩余时间
//             return tomorrow;
//         } else if (type == 2) { // 如果是2，就是本周的剩余时间
//             const leftDays = 6 - (this.getDayIdx() % 7);
//             return leftDays * USDate.DAY_MILLISECONDS + tomorrow;
//         } else if (type == 3) { // 如果是3，就是赛季的剩余时间
//             const days = Math.round(this.cfg.roundTime / USDate.DAY_MILLISECONDS);
//             const leftDays = (days - 1) - (this.getDayIdx() % days);
//             return leftDays * USDate.DAY_MILLISECONDS + tomorrow;
//         }
//         return 0;
//     }
//     refreshTask(type: TaskGroupType, idx: number): IPassTask {
//         const curTasks = this.getTasks(type);
//         const task = this.randomTask(type, curTasks);
//         this._data.taskIdxs[type][idx] = task.idx;
//         this._data.taskDatas[type][idx] = {
//             received: false,
//             progress: 0,
//         };
//         this.save();
//         return task;
//     }
//     receiveTask(type: TaskGroupType, idx: number): IPassTaskResult {
//         const task = this.getTasks(type)[idx];
//         if (this._data.taskDatas[type][idx].received) { // 已领取
//             return null;
//         }
//         if (this._data.taskDatas[type][idx].progress < task.targetAmount) { // 未完成
//             return null;
//         }
//         const lastLv = this._data.curLv;
//         this._data.taskDatas[type][idx].received = true;
//         // 增加经验
//         const finishedPass = this.addExp(task.taskReward);
//         this.save();
//         this.onReceiveTask(type);
//         return {
//             finishedPass,
//             addExp: task.taskReward,
//             lastLv,
//             curLv: this._data.curLv,
//             curLvExp: this._data.curLvExp,
//         };
//     }
//     /**领取所有任务经验 */
//     receiveAllTask(type: TaskGroupType, isAd: boolean): IPassTaskResult {
//         const tasks = this.getTasks(type);
//         const taskDatas = this.getTaskDatas(type);
//         let addExp = 0;
//         for (let idx = 0; idx < taskDatas.length; idx++) {
//             const taskData = taskDatas[idx];
//             const task = tasks[idx];
//             if (!taskData.received && taskData.progress >= task.targetAmount) {
//                 taskData.received = true;
//                 let exp = task.taskReward;
//                 if (isAd) {
//                     exp *= 2;
//                 }
//                 addExp += exp;
//             }
//         }
//         if (addExp == 0) {
//             return null;
//         }
//         const lastLv = this._data.curLv;
//         const finishedPass = this.addExp(addExp);
//         this.save();
//         this.onReceiveTask(type);
//         return {
//             finishedPass,
//             addExp,
//             lastLv,
//             curLv: this._data.curLv,
//             curLvExp: this._data.curLvExp,
//         };
//     }
//     /**是否存在未领取任务 */
//     hasUnreceivedTask(type: TaskGroupType): boolean {
//         const tasks = this.getTasks(type);
//         const taskDatas = this.getTaskDatas(type);
//         for (let idx = 0; idx < taskDatas.length; idx++) {
//             const taskData = taskDatas[idx];
//             const task = tasks[idx];
//             if (!taskData.received && taskData.progress >= task.targetAmount) {
//                 return true;
//             }
//         }
//         return false;
//     }
//     private onReceiveTask(type: TaskGroupType) {
//         const taskDatas = this.getTaskDatas(type);
//         // 如果所有task都是received，则刷新任务
//         if (taskDatas.every(e => e.received)) {
//             this.refreshTaskGroup(type);
//         }
//     }
//     /**获得未领取任务数量 */
//     getUnreceivedTaskCount(): number {
//         let types: TaskGroupType[] = [1, 2, 3];
//         let count = 0;
//         for (const type of types) {
//             const taskDatas = this.getTaskDatas(type);
//             const tasks = this.getTasks(type);
//             for (let idx = 0; idx < taskDatas.length; idx++) {
//                 const taskData = taskDatas[idx];
//                 const task = tasks[idx];
//                 if (!taskData.received && taskData.progress >= task.targetAmount) {
//                     count++;
//                 }
//             }
//         }
//         return count;
//     }
//     private addExp(exp: number) {
//         console.log(TAG, 'addExp', exp);
//         // let curLv = this._data.curLv;
//         let passList: IPassItem[] = [];
//         const func = (exp: number) => {
//             const pass = this.getCurPass();
//             this._data.curLvExp += exp;
//             if (this._data.curLvExp >= pass.upgradeExp) {
//                 passList.push(pass);
//                 const leftExp = this._data.curLvExp - pass.upgradeExp;
//                 if (pass.passLevel >= this.bankLevel) {
//                     // 当是bank时，不增加等级，只增加经验和增加bank的金币
//                     this._data.curLvExp = 0;
//                     this._data.bankRewards = this._data.bankRewards || [];
//                     this._data.bankRewards.push(...pass.payReward);
//                     this._data.bankRewards = UserCtrl.integrateRewards(this._data.bankRewards);
//                     console.log(TAG, '增加bank的金币', this._data.bankRewards);
//                 } else {
//                     this._data.curLv++;
//                     this._data.curLvExp = 0;
//                 }
//                 if (leftExp > 0) {
//                     func(leftExp);
//                 }
//             }
//         }
//         func(exp);
//         this.save();
//         return passList;
//     }
//     //============<onTask
//     onTaskLogin(): void {
//         this.onTask({targetType: TaskTargetType.login, value: 1});
//     }
//     onTaskCollectCoin(coin: number): void {
//         this.onTask({targetType: TaskTargetType.collectCoin, value: coin});
//     }
//     onTaskGameStart(): void {
//         this._taskCounter = {
//             steakFullCount: 0,
//             collectCardRed: 0,
//             collectCardBlack: 0,
//             maxComboLink: 0,
//             jokerKeepCombo: 0,
//             boosterClearCard: 0,
//         };
//     }
//     onTaskSteakFull(): void {
//         this._taskCounter.steakFullCount++;
//     }
//     onTaskCollectCard(color: SteakColor): void {
//         if (color == SteakColor.red) {
//             this._taskCounter.collectCardRed++;
//         } else {
//             this._taskCounter.collectCardBlack++;
//         }
//     }
//     isJokerKeepCombo = false;
//     onTaskComboLink(count: number): void {
//         if (count > 1) {
//             this._taskCounter.maxComboLink = Math.max(this._taskCounter.maxComboLink, count);
//         }
//     }
//     onTaskJokerKeepCombo(): void {
//         this._taskCounter.jokerKeepCombo ++;
//     }
//     onTaskBoosterClearCard(count: number): void {
//         this._taskCounter.boosterClearCard += count;
//     }
//     onTaskUndo(action: GameAction): void {
//         console.log(TAG, 'onTaskUndo', action);
//         // undo steakFull
//         if (action.steakAwardPoolCardIdxs?.length > 0) {
//             this._taskCounter.steakFullCount --;
//         }
//         // undo collectCard
//         if (action.type == GameActionType.linkTable) {
//             const cardValue = action.targetCard?.value;
//             if (cardValue < CardValueBlank || cardValue == CardValueRed || cardValue == CardValueBlack) {
//                 const taskColor = GameLogic.getCardTaskColor(action.targetCard.value);
//                 if (taskColor == SteakColor.red) {
//                     this._taskCounter.collectCardRed --;
//                 } else {
//                     this._taskCounter.collectCardBlack --;
//                 }
//             }
//         }
//         // undo boosterClearCard
//         if (action.type == GameActionType.drawPool) {
//             if (action.targetCard?.value == CardValueBlow && action.blowCards?.length > 0) {
//                 this._taskCounter.boosterClearCard -= action.blowCards.length;
//             }
//         }
//     }
//     onTaskGameEnd(bWin: boolean): void {
//         if (this.getSate() != 0) {
//             return; // 活动未开启
//         }
//         const datas: {targetType: TaskTargetType, value: number}[] = [];
//         if (bWin) {
//             datas.push({targetType: TaskTargetType.gameWin, value: 1});
//             datas.push({targetType: TaskTargetType.gameWinCombo, value: 1});
//         } else {
//             datas.push({targetType: TaskTargetType.gameWinCombo, value: 0});
//         }
//         datas.push({targetType: TaskTargetType.steakFull, value: this._taskCounter.steakFullCount});
//         datas.push({targetType: TaskTargetType.collectCardRed, value: this._taskCounter.collectCardRed});
//         datas.push({targetType: TaskTargetType.collectCardBlack, value: this._taskCounter.collectCardBlack});
//         datas.push({targetType: TaskTargetType.maxComboLink, value: this._taskCounter.maxComboLink});
//         datas.push({targetType: TaskTargetType.jokerKeepCombo, value: this._taskCounter.jokerKeepCombo});
//         datas.push({targetType: TaskTargetType.boosterClearCard, value: this._taskCounter.boosterClearCard});
//         this.onTask(...datas);
//     }
//     private onTask(...datas: {targetType: TaskTargetType, value: number}[]) {
//         if (this.getSate() != 0) {
//             return; // 活动未开启
//         }
//         console.log(TAG, 'onTask', datas);
//         // 拿到所有任务
//         const types: TaskGroupType[] = [1, 2, 3];
//         for (const type of types) {
//             const tasks = this.getTasks(type);
//             const taskDatas = this.getTaskDatas(type);
//             for (let idx = 0; idx < tasks.length; idx++) {
//                 const task = tasks[idx];
//                 const taskData = taskDatas[idx];
//                 for (const data of datas) {
//                     if (task.taskTarget == data.targetType) {
//                         if (data.value) {
//                             if (data.targetType == TaskTargetType.maxComboLink) {
//                                 taskData.progress = Math.max(taskData.progress, data.value);
//                             } else {
//                                 taskData.progress += data.value;
//                             }
//                         } else {
//                             if (data.targetType == TaskTargetType.gameWinCombo) {
//                                 taskData.progress = 0;
//                             }
//                         }
//                         if (taskData.progress >= task.targetAmount) {
//                             taskData.progress = task.targetAmount;
//                         }
//                     }
//                 }
//             }
//         }
//         this.save();
//     }
//     public reportProgress() {
//         const types: TaskGroupType[] = [1, 2, 3];
//         let status: string[] = [];
//         for (const type of types) {
//             const tasks = this.getTasks(type);
//             const taskDatas = this.getTaskDatas(type);
//             const count = tasks.length;
//             let progress = 0;
//             for (let idx = 0; idx < tasks.length; idx++) {
//                 const task = tasks[idx];
//                 const taskData = taskDatas[idx];
//                 if (taskData.progress >= task.targetAmount) {
//                     progress++;
//                 }
//             }
//             status.push(progress + '/' + count);
//         }
//         // 当receiveds或receivedsPass领取了任意一个时，isRewardGet为true
//         const isRewardGet = [...this._data.receiveds, ...this._data.receivedsPass].some(e => e);
//         EventReport.pass_progress({
//             level: UserModel.curLevelId,
//             layoutid: UserModel.curLevelId,
//             dailyTaskStatus: status[0],
//             weeklyTaskStatus: status[1],
//             seasonTaskStatus: status[2],
//             passRewardLevel: this.getLv(),
//             isRewardGet,
//         });
//     }
//     //onTask>============
//     private static _instance: IPassCtrl = null;
//     public static get instance() {
//         return this._instance || (this._instance = new PassCtrl());
//     }
// }
// /**1日 2周 3赛季 */
// export type TaskGroupType = 1|2|3;

// enum TaskTargetType {
//     gameWin = 1,
//     collectCardRed = 2,
//     collectCardBlack = 3,
//     steakFull = 4,
//     collectCoin = 5,
//     login = 6,
//     jokerKeepCombo = 7,
//     boosterClearCard = 8,
//     gameWinCombo = 9,
//     maxComboLink = 10,
// }
// interface IPassTaskCounter {
//     steakFullCount: number;
//     collectCardRed: number;
//     collectCardBlack: number;
//     maxComboLink: number;
//     jokerKeepCombo: number; // 使用万能牌保持连击
//     boosterClearCard: number; // 使用Booster清除卡牌
// }